export default {
	/**
	 * 对象序列化
	 * @param {Object} data 序列化数据对象
	 * @param {String} split 拼接分隔符
	 */
	serializeObject(data = {}, split = '&'){
		const paramsArr = []
		for(const key in data){
			paramsArr.push(encodeURIComponent(key || '') + '=' + encodeURIComponent(data[key] || ''))
		}
		return paramsArr.join(split)
	},

	/**
	 * 对象反序列化
	 * @param {String} str 目标字符串
	 * @param {String} split 分割字符
	 */
	deserializeObject(str = '', split = '&'){
		let searchArr = str.split(split)
		return searchArr.reduce((pre, cur) => {
			const [key,value] = cur.split('=')
			if(key){
				pre[decodeURIComponent(key)] = decodeURIComponent(value || '')
			}
			return pre
		}, {})
	},

	/**
	* 时间格式化
	* @param {string/Number} date 基准日期
	* @return {string} 格式化后日期
	**/
	createdTimeFormat (date) {
		let dateStr = date + '';
		if (dateStr.indexOf('-') > -1) {
			dateStr = dateStr.replace(/-/g, '/');
		}
		let dates = new Date(dateStr);
		let Y = dates.getFullYear().toString().substr(2, 4);
		let M = dates.getMonth() + 1;
		M = (M < 10 ? '0' + M : M);
		let D = (dates.getDate() < 10 ? '0' + dates.getDate() : dates.getDate());
		let h = (dates.getHours() < 10 ? '0' + dates.getHours() : dates.getHours());
		let m = (dates.getMinutes() < 10 ? '0' + dates.getMinutes() : dates.getMinutes());
		let s = (dates.getSeconds() < 10 ? '0' + dates.getSeconds() : dates.getSeconds());

		return Y + '' + M + D + h + m + s;
	},

	/**
	* 随机生成指定长度字符
	* @param {string} n  字符长度
	* @return {string} 生成后的字符串
	**/
	randomString (n) {
		let str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
		let tmp = '',
			i = 0,
			l = str.length;
		for (i = 0; i < n; i++) {
			tmp += str.charAt(Math.floor(Math.random() * l));
		}
		return tmp;
	},

	/**
     * 检查传入参数类型
     * @param {all} obj 要检查的参数
     * @return {String} 参数类型：undefined、string、array、number、function、object
     **/
    __type (obj) {
        return Object.prototype.toString.call(obj).replace(/\[object (\w+)\]/, '$1').toLowerCase();
    },

	/**
     * 检查传入参数类型是否为对象
     * @param {all} obj 要检查的参数
     * @return {Boolean}
     **/
    __isObject (obj) {
        return this.__type(obj) === 'object';
	}
}
